#!/usr/bin/env python
#by Gabriel Franco / Root-Secure Argentina v1.0.3.0
import os, subprocess
import sys
from subprocess import Popen, PIPE

def crear_carpeta(cliente,opcion):
    if opcion==1:
        os.mkdir(cliente)
        entorno = "/Entorno"
        c_e = cliente+entorno
        os.mkdir(c_e)
    elif opcion==2:
        os.mkdir(cliente)
        rp = "/ReconPasivo"
        c_rp = cliente+rp
        os.mkdir(c_rp)
    elif opcion==3:
        os.mkdir(cliente)
        ra = "/ReconActivo"
        c_ra = cliente+ra
        os.mkdir(c_ra)
    elif opcion==4:
        entorno = "/Entorno"
        ra = "/ReconActivo"
        rp = "/ReconPasivo"
        c_e = cliente+entorno
        c_ra = cliente+ra
        c_rp = cliente+rp
        os.mkdir(cliente)
        os.mkdir(c_e)
        os.mkdir(c_ra)
        os.mkdir(c_rp)
    elif opcion==99:
        exit

#FILTRO
def check_execs(*progs):
    for prog in progs:
        try:
            Popen([prog, '--help'], stdout=PIPE, stderr=PIPE)
        except OSError:
            msg = 'El programa {0} es necesario para continuar'.format(prog)
            sys.exit(msg)
    return

def main():
    pass

if __name__ == "__main__":
    check_execs('nmap')
    main()

#COMIENZO
proyecto_cliente = raw_input("Ingrese por favor el nombre del cliente/proyecto: ")
interfase = raw_input("Seleccione el nombre de la interface con la que va a trabajar: ")
opcion = input("****************************************************" + "\n"
    " 1- Identificacion del entorno" + "\n" " 2- Reconocimiento Pasivo" + "\n" " 3- Reconocimiento Activo" + "\n" " 4- Analisis completo" + "\n" " 99- Salir"
               + "\n" "Ingrese el numero de la opcion deseada: ")

if opcion == 1:
    if __name__ == "__main__":
        check_execs('wireshark')
        main()
    if __name__ == "__main__":
        check_execs('ettercap')
        main()
    cateo = " /etc/resolv.conf > salida_resolvconf.txt"
    modo = " -V > salida_nmapVersion.txt"
    wire = " -v > salida_wiresharkVersion.txt"
    etter = " -v >salida_ettercapVersion.txt"
    crear_carpeta(proyecto_cliente,1)
    proyecto_cliente = proyecto_cliente+"/Entorno"
    #ifconfig
    interfase_salida = " " +interfase+" > salida_ifconfig.txt"
    os.system("ifconfig" +interfase_salida)
    os.system("sudo mv salida_ifconfig.txt " +proyecto_cliente)
    #cateo
    os.system("cat" +cateo)
    os.system("sudo mv salida_resolvconf.txt " +proyecto_cliente)
    #modo
    os.system("nmap" +modo)
    os.system("sudo mv salida_nmapVersion.txt " +proyecto_cliente)
    #wireshark
    os.system("wireshark" +wire)
    os.system("sudo mv salida_wiresharkVersion.txt " +proyecto_cliente)
    #ettercap
    os.system("ettercap" +etter)
    os.system("sudo mv salida_ettercapVersion.txt " +proyecto_cliente)
    #import dnsrecon prueba de trasnferencia de zona.
    os.system("python /usr/share/dnsrecon/dnsrecon.py -t axfr -d /etc/resolv.conf > salida_dnsrecon.txt")
    os.system("sudo mv salida_dnsrecon.txt " +proyecto_cliente)
    #import dnsmap -> ver dominios, del dominio principal -> hay que descargarlo en Kali.
    
    
elif opcion == 2:
    crear_carpeta(proyecto_cliente,2)
    proyecto_cliente = proyecto_cliente+"/ReconPasivo"
    if __name__ == "__main__":
        check_execs('ettercap')
        main()
    #Ping Scan
    os.system("sudo nmap -sP -iL objetivos.txt -oA PingScan")
    os.system("sudo mv PingScan.xml " +proyecto_cliente)
    os.system("sudo mv PingScan.nmap " +proyecto_cliente)
    os.system("sudo mv PingScan.gnmap " +proyecto_cliente)

    #Ettercap escuchando
    import time
    #start = time.clock() #COMIENZO
    #end = time.clock()   #FIN
    #while(end - start < 600): #PASARON 10 MINUTOS ?
        #os.system("sudo ettercap -Tq " +interfase, " -M arp:remote //") #TAREA
        #os.system("ettercap -TzQP finger //") #TAREA2

    #end = time.clock() #TOMAR TIEMPO NUEVAMENTE
    #print "Tiempo: ", end - start PRINT DE PRUEBA DE TIEMPO. dejar comentada

    #PARSER DE INFORMACION DE SERVIDORES
    import os, sys
    os.system("sudo nmap -F -iL objetivos.txt -oA FastScan")
    #os.system("sudo chmod -R 777 Escritorio/Proyecto") lo puse por ser mi maquina, nada mas.
    os.system("grep -e 25 -e 109 -e 110 -e 143 FastScan.nmap > servidores_de_correo.txt")
    os.system("sudo mv servidores_de_correo.txt " +proyecto_cliente)
    os.system("grep -e 80 -e 443 FastScan.nmap > servidores_web.txt")
    os.system("sudo mv servidores_web.txt " +proyecto_cliente)
    os.system("grep -e 8470 -e 8471 -e 8472 -e 8473 -e 8474 -e 8475 -e 8476 -e 449 -e 9470 -e 9471 -e 9472 -e 9473 -e 9474 -e 9475 -e 9476 FastScan.nmap > servidores_de_BD.txt")
    os.system("sudo mv servidores_de_BD.txt " +proyecto_cliente) 
    os.system("grep -e 445 -e 389 FastScan.nmap > active_directory_o_LDAP.txt")
    os.system("sudo mv active_directory_o_LDAP.txt " +proyecto_cliente)
    os.system("grep -e 21 -e 22 -e 69 FastScan.nmap > servidores_ftp_tftp_sftp.txt")
    os.system("sudo mv servidores_ftp_tftp_sftp.txt " +proyecto_cliente) 
    os.system("grep -e 22 FastScan.nmap > servidor_ssh.txt")
    os.system("sudo mv servidor_ssh.txt " +proyecto_cliente)
    os.system("grep -e 35 -e 92 -e 170 -e 515 -e 631 -e 9100 FastScan.nmap > print_server.txt")
    os.system("sudo mv print_server.txt " +proyecto_cliente)
    os.system("sudo mv FastScan.xml " +proyecto_cliente)
    os.system("sudo mv FastScan.nmap " +proyecto_cliente)
    os.system("sudo mv FastScan.gnmap " +proyecto_cliente)

    #USO DE DNSRECON
    os.system("python /usr/share/dnsrecon/dnsrecon.py -t axfr -d /etc/resolv.conf")
    
    
elif opcion == 3:
    import os,sys
    crear_carpeta(proyecto_cliente,3)
    proyecto_cliente = proyecto_cliente+"/ReconActivo"
    if __name__ == "__main__":
        check_execs('ettercap')
        main()
    
    #USO DE NMAP MASIVAMENTE
    os.system("sudo nmap -sP -P0 -iL objetivos.txt -oA ICMProbe")
    os.system("sudo mv ICMProbe.xml " +proyecto_cliente)
    os.system("sudo mv ICMProbe.nmap " +proyecto_cliente)
    os.system("sudo mv ICMProbe.gnmap " +proyecto_cliente)
    os.system("sudo nmap -sS -P0 -F -iL objetivos.txt -oA TCProbe")
    os.system("sudo mv TCProbe.xml " +proyecto_cliente)
    os.system("sudo mv TCProbe.nmap " +proyecto_cliente)
    os.system("sudo mv TCProbe.gnmap " +proyecto_cliente)
    os.system("sudo nmap -sU -P0 -F -iL objetivos.txt -oA UDProbe")
    os.system("sudo mv UDProbe.xml " +proyecto_cliente)
    os.system("sudo mv UDProbe.nmap " +proyecto_cliente)
    os.system("sudo mv UDProbe.gnmap " +proyecto_cliente)
    os.system("sudo nmap -sT -P0 -p- -iL objetivos.txt -oA TCPFull")
    os.system("sudo mv TCPFull.xml " +proyecto_cliente)
    os.system("sudo mv TCPFull.nmap " +proyecto_cliente)
    os.system("sudo mv TCPFull.gnmap " +proyecto_cliente)
##    os.system("sudo nmap -sU -P0 -iL objetivos.txt -oA UDPFull") #agregarle -p-
    os.system("sudo mv UDPFull.xml " +proyecto_cliente)
    os.system("sudo mv UDPFull.nmap " +proyecto_cliente)
    os.system("sudo mv UDPFull.gnmap " +proyecto_cliente)
    os.system("sudo nmap -sT -O -P0 -F -iL objetivos.txt -oA OSFP")
    os.system("sudo mv OSFP.xml " +proyecto_cliente)
    os.system("sudo mv OSFP.nmap " +proyecto_cliente)
    os.system("sudo mv OSFP.gnmap " +proyecto_cliente)
    #os.system("nmap -sV -p(puertos) -iL Target.txt -oA APPFP")
    #os.system("sudo mv APPFP.xml " +proyecto_cliente)
    #os.system("sudo mv APPFP.nmap " +proyecto_cliente)
    #os.system("sudo mv APPFP.gnmap " +proyecto_cliente)

  

elif opcion == 4:
	import os,sys, string
	crear_carpeta(proyecto_cliente,4)
	#Creacion de directorios por SO
	os.system("sudo mkdir SOWindows")
	os.system("sudo mkdir SOLinux")
	os.system("sudo mkdir SOMac")
	os.system("sudo mv SOMac " +proyecto_cliente)
	os.system("sudo mv SOWindows " +proyecto_cliente)
	os.system("sudo mv SOLinux " +proyecto_cliente)
	#Directorios para salidas de NMAP
	os.system("sudo mkdir SOWindows-NMAP")
	os.system("sudo mkdir SOLinux-NMAP")
	os.system("sudo mkdir SOMac-NMAP")
	os.system("sudo mv SOLinux-NMAP " +proyecto_cliente + "/SOLinux")
	os.system("sudo mv SOWindows-NMAP " +proyecto_cliente + "/SOWindows")
	os.system("sudo mv SOMac-NMAP " +proyecto_cliente + "/SOMac")
	#Directorios de salidas de xProbe
	os.system("sudo mkdir SOWindows-XPROBE")
	os.system("sudo mkdir SOLinux-XPROBE")
	os.system("sudo mkdir SOMac-XPROBE")
	os.system("sudo mv SOLinux-XPROBE " +proyecto_cliente + "/SOLinux")
	os.system("sudo mv SOWindows-XPROBE " +proyecto_cliente + "/SOWindows")
	os.system("sudo mv SOMac-XPROBE " +proyecto_cliente + "/SOMac")
	
	
	#Uso de nmap -O
	lista = open('objetivos.txt').readlines()
	lista = map(str.strip,lista)
	for objetivo in lista:
		#objetivo = objetivo + '>> ' +objetivo + '.txt'
		os.system("sudo nmap -O " +objetivo +" > " +objetivo +".nmap")
		abrir_objetivo = open(objetivo+".nmap","r").read()
		if abrir_objetivo.find("Linux")>=0:
			os.system("sudo mv " +objetivo +".nmap " +proyecto_cliente +"/SOLinux/SOLinux-NMAP")
		if abrir_objetivo.find("Windows")>=0:
			os.system("sudo mv " +objetivo +".nmap " +proyecto_cliente +"/SOWindows/SOWindows-NMAP")
		if abrir_objetivo.find("Mac")>=0:
			os.system("sudo mv " +objetivo +".nmap " +proyecto_cliente +"/SOMac/SOMac-NMAP")
	
	#Analizar Puertos correspondientes a los scans por nmap -O
		#Windows
	os.system('ls ' +proyecto_cliente+ '/SOWindows/SOWindows-NMAP | cut -d "." -f1-4 > nuevos_objetivos.txt')
	os.system("nmap -sS -iL nuevos_objetivos.txt -oA PuertosAbiertosWindows")
	os.system("sudo mv PuertosAbiertosWindows.nmap "+proyecto_cliente +"/SOWindows/SOWindows-NMAP")
	os.system("sudo mv PuertosAbiertosWindows.gnmap "+proyecto_cliente +"/SOWindows/SOWindows-NMAP")
	os.system("sudo mv PuertosAbiertosWindows.xml "+proyecto_cliente +"/SOWindows/SOWindows-NMAP")
	os.system("sudo mv nuevos_objetivos.txt " +proyecto_cliente +"/SOWindows/SOWindows-NMAP")
		#Linux
	os.system('ls ' +proyecto_cliente+ '/SOLinux/SOLinux-NMAP | cut -d "." -f1-4 > nuevos_objetivos.txt')
	os.system("nmap -sS -iL nuevos_objetivos.txt -oA PuertosAbiertosLinux")
	os.system("sudo mv PuertosAbiertosLinux.nmap "+proyecto_cliente +"/SOLinux/SOLinux-NMAP")
	os.system("sudo mv PuertosAbiertosLinux.gnmap "+proyecto_cliente +"/SOLinux/SOLinux-NMAP")
	os.system("sudo mv PuertosAbiertosLinux.xml "+proyecto_cliente +"/SOLinux/SOLinux-NMAP")
	os.system("sudo mv nuevos_objetivos.txt " +proyecto_cliente +"/SOLinux/SOLinux-NMAP")	
		#MacOS
	os.system('ls ' +proyecto_cliente+ '/SOMac/SOMac-NMAP | cut -d "." -f1-4 > nuevos_objetivos.txt')
	os.system("nmap -sS -iL nuevos_objetivos.txt -oA PuertosAbiertosMac")
	os.system("sudo mv PuertosAbiertosMac.nmap "+proyecto_cliente +"/SOMac/SOMac-NMAP")
	os.system("sudo mv PuertosAbiertosMac.gnmap "+proyecto_cliente +"/SOMac/SOMac-NMAP")
	os.system("sudo mv PuertosAbiertosMac.xml "+proyecto_cliente +"/SOMac/SOMac-NMAP")
	os.system("sudo mv nuevos_objetivos.txt " +proyecto_cliente +"/SOMac/SOMac-NMAP")

	#Uso de xProbe2
	lista = open('objetivos.txt').readlines()
	lista = map(str.strip,lista)
	for objetivo in lista:
		os.system("xprobe2 " +objetivo +" > " +objetivo +".txt")
		abrir_objetivo = open(objetivo+".txt","r").read()
		if abrir_objetivo.find("Linux")>=0:
			os.system("mv " +objetivo +".txt " +proyecto_cliente +"/SOLinux/SOLinux-XPROBE")
		if abrir_objetivo.find("Windows")>=0:
			os.system("mv " +objetivo +".txt " +proyecto_cliente +"/SOWindows/SOWindows-XPROBE")
		if abrir_objetivo.find("Mac")>=0:
			os.system("mv " +objetivo +".txt " +proyecto_cliente +"/SOMac/SOMac-XPROBE")
	
	#Analisis de puertos por los resultados de xProbe
		#Windows
	os.system('ls ' +proyecto_cliente+ '/SOWindows/SOWindows-XPROBE | cut -d "." -f1-4 > nuevos_objetivos.txt')
	os.system("nmap -sS -iL nuevos_objetivos.txt -oA PuertosAbiertosWindows")
	os.system("sudo mv PuertosAbiertosWindows.nmap "+proyecto_cliente +"/SOWindows/SOWindows-XPROBE")
	os.system("sudo mv PuertosAbiertosWindows.gnmap "+proyecto_cliente +"/SOWindows/SOWindows-XPROBE")
	os.system("sudo mv PuertosAbiertosWindows.xml "+proyecto_cliente +"/SOWindows/SOWindows-XPROBE")
	os.system("sudo mv nuevos_objetivos.txt " +proyecto_cliente +"/SOWindows/SOWindows-XPROBE")
		#Linux
	os.system('ls ' +proyecto_cliente+ '/SOLinux/SOLinux-XPROBE | cut -d "." -f1-4 > nuevos_objetivos.txt')
	os.system("nmap -sS -iL nuevos_objetivos.txt -oA PuertosAbiertosLinux")
	os.system("sudo mv PuertosAbiertosLinux.nmap "+proyecto_cliente +"/SOLinux/SOLinux-XPROBE")
	os.system("sudo mv PuertosAbiertosLinux.gnmap "+proyecto_cliente +"/SOLinux/SOLinux-XPROBE")
	os.system("sudo mv PuertosAbiertosLinux.xml "+proyecto_cliente +"/SOLinux/SOLinux-XPROBE")
	os.system("sudo mv nuevos_objetivos.txt " +proyecto_cliente +"/SOLinux/SOLinux-XPROBE")	
		#MacOS
	os.system('ls ' +proyecto_cliente+ '/SOMac/SOMac-XPROBE | cut -d "." -f1-4 > nuevos_objetivos.txt')
	os.system("nmap -sS -iL nuevos_objetivos.txt -oA PuertosAbiertosMac")
	os.system("sudo mv PuertosAbiertosMac.nmap "+proyecto_cliente +"/SOMac/SOMac-XPROBE")
	os.system("sudo mv PuertosAbiertosMac.gnmap "+proyecto_cliente +"/SOMac/SOMac-XPROBE")
	os.system("sudo mv PuertosAbiertosMac.xml "+proyecto_cliente +"/SOMac/SOMac-XPROBE")
	os.system("sudo mv nuevos_objetivos.txt " +proyecto_cliente +"/SOMac/SOMac-XPROBE")	
		
elif opcion == 99:
    crear_carpeta(proyecto_cliente,99)
else:
    print "Opcion no valida"







    

